package com.quectel.business.dms.application.access;

import com.quectel.business.dms.application.access.basemodel.ApplicationOriginDevice;
import com.quectel.core.module.application.dto.ApplicationDto;
import com.quectel.core.module.device.dto.DeviceCommandTemplateDto;
import com.quectel.core.module.device.dto.DeviceDto;

import java.util.List;
import java.util.Map;

public interface Accessor {

    /**
     * 应用初始化(需要保持幂等性)
     *
     * @param application
     * @return
     */
    boolean initApplication(ApplicationDto application);

    /**
     * 根据应用同步设备或者直接传入设备进行注册
     *
     * @param application 应用
     * @param devices     可以为null(当某种设备类型通过application抓取设备的时候，该参数忽略即可)
     * @return
     */
    boolean syncOrRegisterDevices(ApplicationDto application, List<ApplicationOriginDevice> devices);

    /**
     * 订阅事件
     *
     * @param application
     * @return
     */
    boolean subscribeEvents(ApplicationDto application);

    /**
     * 设备详情下发指定
     *
     * @param deviceDto
     * @param deviceCommandTemplateDto
     * @param params
     * @param cmdId
     * @return
     */
    boolean sendCmd(DeviceDto deviceDto, DeviceCommandTemplateDto deviceCommandTemplateDto, Map<String, Object> params, Long cmdId);
}
